# Define to use stubs, undefine to use the real Xen functions.
#CPPFLAGS += -D _XEN_XFR_STUB_
+ifeq ($(SXPR_DEBUG),1)
+CPPFLAGS += -D _XEN_XFR_STUB_ -D SXPR_PARSER_MAIN
+endif
+
CC := gcc
CFLAGS += -g
CFLAGS += -Wall
-CFALGS += -Werror
+CFLAGS += -Werror
CFLAGS += $(INCLUDES)
# Make gcc generate dependencies.
CFLAGS += -Wp,-MD,.$(@F).d
int err = 0;
ParserState *s = p->state;
p->state = s->parent;
+ if (p->start_state == s)
+ p->start_state = NULL;
ParserState_free(s);
return err;
}
if(CONSP(p->val)){
v = p->val;
p->val = ONONE;
- } else if(CONSP(p->start_state->val)){
+ } else if(p->start_state && CONSP(p->start_state->val)){
v = p->start_state->val;
p->start_state->val = ONULL;
v = nrev(v);
return p->eof;
}
-//#define SXPR_PARSER_MAIN
#ifdef SXPR_PARSER_MAIN
/* Stuff for standalone testing. */
#include "file_stream.h"
#include "string_stream.h"
-int stringof(Sxpr exp, char **s){
- int err = 0;
- if(ATOMP(exp)){
- *s = atom_name(exp);
- } else if(STRINGP(exp)){
- *s = string_string(exp);
- } else {
- err = -EINVAL;
- *s = NULL;
- }
- return err;
-}
-
+extern int stringof(Sxpr exp, char **s);
int child_string(Sxpr exp, Sxpr key, char **s){
int err = 0;
Sxpr val = sxpr_child_value(exp, key, ONONE);
return err;
}
-int intof(Sxpr exp, int *v){
- int err = 0;
- char *s;
- unsigned long l;
- if(INTP(exp)){
- *v = OBJ_INT(exp);
- } else {
- err = stringof(exp, &s);
- if(err) goto exit;
- err = convert_atoul(s, &l);
- *v = (int)l;
- }
- exit:
- return err;
-}
-
+extern int intof(Sxpr exp, int *v);
int child_int(Sxpr exp, Sxpr key, int *v){
int err = 0;
Sxpr val = sxpr_child_value(exp, key, ONONE);
exit(err ? 1 : 0);
}
+typedef struct Args {
+ int bufsize;
+ unsigned long port;
+ int verbose;
+ int compress;
+} Args;
+
+/** Transfer states. */
+enum {
+ XFR_INIT,
+ XFR_HELLO,
+ XFR_STATE,
+ XFR_RUN,
+ XFR_FAIL,
+ XFR_DONE,
+ XFR_MAX
+};
+
+#ifndef SXPR_PARSER_MAIN
/** Short options. Options followed by ':' take an argument. */
static char *short_opts = (char[]){
OPT_PORT, ':',
{ NULL, 0, NULL, 0 }
};
-typedef struct Args {
- int bufsize;
- unsigned long port;
- int verbose;
- int compress;
-} Args;
+/** Xfrd arguments. */
+static Args _args = {};
-/** Transfer states. */
-enum {
- XFR_INIT,
- XFR_HELLO,
- XFR_STATE,
- XFR_RUN,
- XFR_FAIL,
- XFR_DONE,
- XFR_MAX
-};
+/** Xfrd arguments. */
+static Args *args = &_args;
+#endif
/** Initialize an array element for a constant to its string name. */
#define VALDEF(val) { val, #val }
return s->err_state;
}
-/** Xfrd arguments. */
-static Args _args = {};
-
-/** Xfrd arguments. */
-static Args *args = &_args;
-
/** Set xfrd default arguments.
*
* @param args arguments to set
return err;
}
+#ifndef SXPR_PARSER_MAIN
/** Parse command-line arguments and call the xfrd main program.
*
* @param arg argument count
}
return (err ? 1 : 0);
}
-
+#endif